package compiles

import (
	"fmt"

	"Hy.OJudge.Server/untity"
	"github.com/google/uuid"
)

//代码执行器。。
type impleCodes struct {
	MeasureObj Measure
}

func NewImple() impleCodes {

	return impleCodes{MeasureObj: Measure{}}
}

var (
	GccPaths   string           = "/usr/bin/gcc"
	Bash       string           = "/usr/bin/bash"
	ProcessObj untity.ProUntity = untity.ProUntity{}
)

//用来执行c语言代码
func (im *impleCodes) GccImple(Code string) JudgeRes {
	Name := uuid.New().String() //随机生成 最大程序支持并发访问

	if err := ProcessObj.CreateCodeFiles(Code, Name+".c"); err != nil {
		panic(err)
	}
	//currPaths := ProcessObj.GetCurrentPath()
	//ImpFile := Name + ".out"
	Name = "a"
	Args := make([]string, 1)
	Args[0] = "gcc " + "./File/" + Name + ".c"
	fmt.Println(Args[0])
	//编译结果

	CompileRes := im.MeasureObj.ExecProcess(GccPaths, Args)

	fmt.Println(CompileRes)
	// Args = make([]string, 1)
	// Args[0] = "./" + ImpFile
	// //最终结果
	// r := ProcessObj.StartProcess(Bash, Args)
	// fmt.Println(r)

	return JudgeRes{}
}

//执行python3 代码
func (im *impleCodes) PyImple(Code string) JudgeRes {
	PyPath := "/usr/bin/python3"
	Name := uuid.New().String() //生成一个文件 使用uuid 保证文件唯一

	if err := ProcessObj.CreateCodeFiles(Code, Name+".py"); err != nil {
		panic(err)
	}
	//参数 由于直接调用python3 解释器 参数只用传递路径
	Args := make([]string, 1)

	Args[0] = fmt.Sprintf("./File/%s.py", Name) //./File/*.py..

	res := im.MeasureObj.ExecProcess(PyPath, Args)

	return res
}

func (im *impleCodes) JavaImple(Code string) JudgeRes {
	JavaPath := "/usr/bin/java"
	Name := uuid.New().String() //生成一个文件 使用uuid 保证文件唯一

	if err := ProcessObj.CreateCodeFiles(Code, Name+".java"); err != nil {
		panic(err)
	}
	//参数 由于直接调用python3 解释器 参数只用传递路径
	Args := make([]string, 1)

	Args[0] = fmt.Sprintf("./File/%s.java", Name) //./File/*.py..

	res := im.MeasureObj.ExecProcess(JavaPath, Args)

	return res
}
